package com.diaohw.module.file.mapper;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
import com.diaohw.module.file.obj.entity.AccountFileDO;
import com.diaohw.module.file.obj.query.AccountFileQuery;
import com.diaohw.module.file.obj.tables.AccountFileDef;
import com.diaohw.module.file.obj.tables.FileTagDef;
import com.mybatisflex.core.BaseMapper;
import com.mybatisflex.core.query.QueryWrapper;
import org.apache.ibatis.annotations.Mapper;

import static com.diaohw.module.file.obj.tables.AccountFileDef.ACCOUNT_FILE;
import static com.diaohw.module.file.obj.tables.FileTagDef.FILE_TAGS;

/**
 * 用户上传表 映射层。
 *
 * @author D-Hw
 * @since 2024-11-22 17:21:01
 */
@Mapper
public interface AccountFileMapper extends BaseMapper<AccountFileDO> {

    static QueryWrapper createWrapper(AccountFileQuery query) {
        QueryWrapper wrapper = QueryWrapper.create();
        AccountFileDef af = ACCOUNT_FILE.as("AF");
        wrapper.select(af.AllColumns)
                .from(af);
        if (query.getTagIds() != null) {
            FileTagDef ft = FILE_TAGS.as("FT");
            wrapper.leftJoin(ft).on(ft.FILE_ID.eq(ft.FILE_ID))
                    .and(ft.TAG_ID.in(query.getTagIds()));
        }

        wrapper.and(af.EXT.like(query.getExt()).when(StrUtil.isNotBlank(query.getExt())));
        wrapper.and(af.FILE_ID.like(query.getFileId()).when(StrUtil.isNotBlank(query.getFileId())));
        wrapper.and(af.REMARK.like(query.getRemark()).when(StrUtil.isNotBlank(query.getRemark())));
        wrapper.and(af.FILENAME.like(query.getFilename()).when(StrUtil.isNotBlank(query.getFilename())));
        wrapper.and(af.CATALOG_ID.in(query.getCatalogIds()).when(CollectionUtil.isNotEmpty(query.getCatalogIds())));
        wrapper.and(af.FILE_LENGTH.eq(query.getLength()).when(ObjUtil.isNotNull(query.getLength())));
        return wrapper;
    }
}
